package chixing.day07.homwork;

public class Test {
    public static void main(String[] args) {
        B b = new B("2");
        /*
        *1. 输出顺序是什么？为什么？
        * 先输出A constructor 在输出 B constructor
        * 因为在创建对象时要先初始化父类的属性在初始化子类的属性，然后，执行父类的构造函数在执行子类的构造函数
        *
        * 2.如果 B 中的构造函数写为 B(String name) {}，结果会变吗？
        * 结果不变
        * 构造函数写为B(String name) {}，会把B类中的无参构造覆盖,但是默认会调用super()方法，
        * */

        /*
        *1.请填写 Child 中 show() 方法的正确访问权限，使得方法重写生效。
        * public protected ， 因为子类的访问权限不能比父类的更严格
        *2.如果将 Parent 中的 show() 改为 private，结果会有什么变化？
        * 子类则不能重写show()方法，重写是在可以继承的基础上才能重写，方法设为private则子类不能继承该方法
        * */

        /*
        * 输出结果是什么？解释多态是如何起作用的。
        *Drawing Circle
        *Drawing Square
        * 就是子类重写父类的方法
        * */

        Shape s1 = new Circle();
        Shape s2 = new Square();
        Shape s3 = new Shape();
        Circle circle = new Circle();
        Square square = new Square();
        s1.draw();//circle
        Shape s4 =(Shape)s1;
        s4.draw();//强转之后还是调用的本来的对象方法
        s2.draw();//shape
        s3.draw();
        circle.draw();
        square.draw();


        System.out.println("-------------------------------------");
        Printer printer1 = new Printer();
        ColorPrinter colorPrinter1 = new ColorPrinter();
        printer1.print("aaa");
        colorPrinter1.print("bbb");
        colorPrinter1.print("bbb","red");
        /*
        * 重载 方法名相同，参数列表不同（参数个数不同，参数类型不同，参数顺序不同）
        * 重写 方法名相同，参数列表相同
        * 子类的输出情况和父类不同时要用到重写
        * 子类仍需用到父类的输出情况时要用重载
        * */


    }
}
